package com.zgx.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

import java.util.Collections;

/**
 * 全局跨域配置（适配 Spring Cloud Gateway / WebFlux）
 *
 * 说明：
 * - 使用 CorsWebFilter 作为网关级跨域处理
 * - 允许所有来源（使用 allowedOriginPatterns("*") 以兼容携带凭证场景）
 * - 允许所有请求方法与请求头
 * - 允许携带 Cookie 等凭证
 * - 设置预检请求缓存时间以减少浏览器的预检频率
 */
@Configuration
public class CorsConfig {

	/**
	 * 注册全局跨域过滤器，应用于所有路由（/**）。
	 */
	@Bean
	public CorsWebFilter corsWebFilter() {
		CorsConfiguration config = new CorsConfiguration();
		config.setAllowCredentials(true); // 允许携带 Cookie 等凭证
		config.setAllowedOriginPatterns(Collections.singletonList("*")); // 允许任意来源（与凭证设置兼容）(可在配置文件中使用白名单)
		config.addAllowedHeader("*"); // 允许所有请求头
		config.addAllowedMethod("*"); // 允许所有 HTTP 方法
		config.setMaxAge(3600L); // 预检请求缓存时间（秒）

		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
		source.registerCorsConfiguration("/**", config); // 应用于所有路径
		return new CorsWebFilter(source);
	}
}

